package tests;


import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import claseAsiento.ClaseAsiento;
import claseAsiento.Ejecutiva;
import claseAsiento.Turista;

import vuelo.VueloDirecto;
import asiento.Asiento;
import busqueda.Busqueda;
import filtro.FiltroPorClaseAsiento;

public class FiltroPorClaseAsientoTest {

	FiltroPorClaseAsiento filtro;
	VueloDirecto vuelo;
	Busqueda busqueda, busqueda1;
	Asiento asiento;
	Asiento otroAsiento;
	Asiento diferenteAsiento;
	
	@Before
	public void setUp() throws Exception {
		asiento = new Asiento();
		asiento.setClaseAsiento(new Turista());
		asiento.setOrigen("Arg");
		asiento.setDestino("Bra");
		asiento.setFechaLlegada(new Date());
		asiento.setFechaSalida(new Date());
		
		otroAsiento = new Asiento();
		otroAsiento.setClaseAsiento(new Turista());
		otroAsiento.setOrigen("Arg");
		otroAsiento.setDestino("Bra");
		
		diferenteAsiento = new Asiento();
		diferenteAsiento.setClaseAsiento(new Ejecutiva());
		diferenteAsiento.setOrigen("Arg");
		diferenteAsiento.setDestino("Bra");
		
		vuelo = new VueloDirecto("ECO344", asiento);
		vuelo.addAsiento(asiento);
		
		busqueda = new Busqueda("Arg", "Bra", "date");
		ArrayList<ClaseAsiento> clasesAsientoBusqueda = new ArrayList<ClaseAsiento>();
		clasesAsientoBusqueda.add(new Ejecutiva());
		busqueda.setClaseAsiento(clasesAsientoBusqueda);
		
		busqueda1 = new Busqueda("Arg", "Bra", "date");
		
		filtro = new FiltroPorClaseAsiento();
	}

	
	@Test 

	public void vueloConUnAsientoMismaClase(){ 
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test 
	public void vueloConDosAsientosMismaClase(){ 
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test 
	public void vueloConDosAsientosDiferenteClase(){ 
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test 
	public void vueloConUnAsientoDiferenteClase(){ 
		vuelo.getAsientos().clear();
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test
	public void vueloConUnAsientBusquedaNull(){ 
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test 
	public void vueloConDosAsientosBusquedaNull(){ 
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 2);
	}
	
	@Test 
	public void vueloConTresAsientosBusquedaNull(){ 
		vuelo.addAsiento(otroAsiento);
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 3);
	}
}
